package handler

import (
	"net/http"

	"github.com/gin-gonic/gin"
	"go-file-perception-model/internal/config"
)

// ConfigHandler 处理配置相关的请求
type ConfigHandler struct {
	configService *config.ConfigService
}

// NewConfigHandler 创建新的配置处理器
func NewConfigHandler(fileService interface{}) *ConfigHandler {
	return &ConfigHandler{
		configService: config.NewConfigService(),
	}
}

// GetConfig 获取配置
// @Summary 获取系统配置
// @Description 获取当前系统的所有配置信息
// @Tags config
// @Produce json
// @Success 200 {object} map[string]interface{}
// @Router /api/v1/config [get]
func (h *ConfigHandler) GetConfig(c *gin.Context) {
	cfg, err := h.configService.GetConfig()
	if err != nil {
		c.JSON(http.StatusInternalServerError, gin.H{
			"success": false,
			"message": "获取配置失败: " + err.Error(),
		})
		return
	}

	c.JSON(http.StatusOK, gin.H{
		"success": true,
		"data":    cfg,
	})
}

// SaveConfig 保存配置
// @Summary 保存系统配置
// @Description 保存系统配置到配置文件
// @Tags config
// @Accept json
// @Produce json
// @Param config body map[string]interface{} true "配置信息"
// @Success 200 {object} map[string]interface{}
// @Router /api/v1/config [post]
func (h *ConfigHandler) SaveConfig(c *gin.Context) {
	var newConfig map[string]interface{}
	if err := c.ShouldBindJSON(&newConfig); err != nil {
		c.JSON(http.StatusBadRequest, gin.H{
			"success": false,
			"message": "无效的配置数据: " + err.Error(),
		})
		return
	}

	if err := h.configService.SaveConfig(newConfig); err != nil {
		c.JSON(http.StatusInternalServerError, gin.H{
			"success": false,
			"message": "保存配置失败: " + err.Error(),
		})
		return
	}

	c.JSON(http.StatusOK, gin.H{
		"success": true,
		"message": "配置保存成功",
	})
}